use std::fmt;

struct Circle {
    radius: i32,
}

// 不要直接类型的 ToString trait，应该实现fmt::Display trait，
// 它会自动提供 ToString，并且还可以用来打印类型
impl fmt::Display for Circle {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Circle of radius {}", self.radius)
    }
}

fn main() {
    // ToString
    println!("ToString:");
    let circle = Circle { radius: 6 };
    println!("{}", circle.to_string());

    // FromString
    // 只要对目标类型实现了 FromStr trait，就可以用 parse 把字符串转换成目标类型。
    // 标准库中已经给无数种类型实现了 FromStr。如果要转换到用户定义类型，只要手动实现 FromStr 就行。
    println!("FromString:");
    let parsed: i32 = "5".parse().unwrap();
    let turbo_parsed = "10".parse::<i32>().unwrap();

    let sum = parsed + turbo_parsed;
    println! {"Sum: {:?}", sum};
}
